package com.sunday.common.netty.e4_TCP.client;

import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.LineEncoder;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.util.CharsetUtil;

public class TcpClientChannel extends ChannelInitializer {

    @Override
    protected void initChannel(Channel ch) throws Exception {
        ChannelPipeline channelPipeline = ch.pipeline();
        channelPipeline
                // LineBasedFrameDecoder: 基于换行符的解码器，支持携带结束符或不携带结束符两种解码方式，同时支持配置单行的最大长度。
                .addLast(new LineBasedFrameDecoder(1024))
                // StringDecoder: 字符串解码器，将接收到的对象转换成字符串，然后继续调用后面的处理器。
                .addLast(new StringDecoder())
                // LoggingHandler: 日志处理器，用于打印日志，方便观察消息的传输过程。
                .addLast(new LoggingHandler(LogLevel.INFO))
                // LineEncoder: 行编码器，将字符串对象转换成字符串后，再将其添加换行符后发送到对端。
                .addLast(new LineEncoder(CharsetUtil.UTF_8))
                .addLast(new TcpClientHandler());

    }

}
